﻿using System.Collections.Generic;
using GigaSite.Domain.Entities;
using GigaSite.Domain.Enums;
using GigaSite.Domain.Interfaces.Repositories;

namespace GigaSite.Domain.DAL.Repositories
{
    /// <summary>
    /// СУБД реализация элементов, хранимых на домашней странице
    /// </summary>
    public class HomePageRepository: BaseRepository<HomePageElement>, IHomePageRepository
    {
        /// <summary>
        /// Репозиторий изображений
        /// </summary>
        public IImagesRepository ImagesRepository { get; set; }

        /// <summary>
        /// Стандартный конструктор
        /// </summary>
        /// <param name="dataContext">Контекст данных</param>
        /// <param name="imagesRepository">Репозиторий изображений</param>
        public HomePageRepository(GigaDataContext dataContext, IImagesRepository imagesRepository) : base(dataContext)
        {
            ImagesRepository = imagesRepository;
        }

        /// <summary>
        /// Загружает указанную сущность по ее идентификатору
        /// </summary>
        /// <param name="id">Идентификатор сущности</param>
        /// <returns>Сущность с указанным идентификатором или Null</returns>
        public override HomePageElement Load(long id)
        {
            return Find(e => e.Id == id);
        }

        /// <summary>
        /// Возвращает баннеры, размещенные на главной странице
        /// </summary>
        /// <returns>Коллекция баннеров размещенных на главной странице</returns>
        public IEnumerable<HomePageElement> GetHomePageBanners()
        {
            return Search(e => e.ElementType == HomePageElementTypes.ImageBanner);
        }

        /// <summary>
        /// Удаляет сущность из репозитория
        /// </summary>
        /// <param name="entity">Сущность для удаления</param>
        public override void Delete(HomePageElement entity)
        {
            // Удаляем файл изображения у баннера если он у нас есть
            if (entity.ElementType == HomePageElementTypes.ImageBanner && entity.ImageURL != null && entity.ImageURL.StartsWith("file://"))
            {
                var image = ImagesRepository.GetImage(entity.ImageURL);
                if (image != null)
                {
                    ImagesRepository.Delete(image);
                }
            }
            base.Delete(entity);
        }
    }
}